package com.yw.config;//package com.yw.config;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.serializer.SerializerFeature;
//import com.yw.properties.RedisClientConfigProperties;
//import io.netty.buffer.ByteBuf;
//import io.netty.buffer.ByteBufAllocator;
//import io.netty.buffer.ByteBufInputStream;
//import io.netty.buffer.ByteBufOutputStream;
//import org.redisson.Redisson;
//import org.redisson.api.RedissonClient;
//import org.redisson.client.codec.BaseCodec;
//import org.redisson.client.protocol.Decoder;
//import org.redisson.client.protocol.Encoder;
//import org.redisson.codec.JsonJacksonCodec;
//import org.redisson.config.Config;
//import org.springframework.boot.context.properties.EnableConfigurationProperties;
//import org.springframework.context.ConfigurableApplicationContext;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//
//import java.io.IOException;
//
///**
// * Redis 客户端，使用 Redisson <a href="https://github.com/redisson/redisson">Redisson</a>
// *
// * @author suny
// */
//@Configuration
//@EnableConfigurationProperties(RedisClientConfigProperties.class)
//public class RedisClientConfig {
//
//    @Bean("redissonClient")
//    public RedissonClient redissonClient(ConfigurableApplicationContext applicationContext, RedisClientConfigProperties properties) {
//        Config config = new Config();
//        // 根据需要可以设定编解码器；https://github.com/redisson/redisson/wiki/4.-%E6%95%B0%E6%8D%AE%E5%BA%8F%E5%88%97%E5%8C%96
//        config.setCodec(JsonJacksonCodec.INSTANCE);
//
//        config.useSingleServer()
//                .setAddress("redis://" + properties.getHost() + ":" + properties.getPort())
////                .setPassword(properties.getPassword())
//                .setConnectionPoolSize(properties.getPoolSize())
//                .setConnectionMinimumIdleSize(properties.getMinIdleSize())
//                .setIdleConnectionTimeout(properties.getIdleTimeout())
//                .setConnectTimeout(properties.getConnectTimeout())
//                .setRetryAttempts(properties.getRetryAttempts())
//                .setRetryInterval(properties.getRetryInterval())
//                .setPingConnectionInterval(properties.getPingInterval())
//                .setKeepAlive(properties.isKeepAlive())
//        ;
//
//        return Redisson.create(config);
//    }
//
//    static class RedisCodec extends BaseCodec {
//
//        private final Encoder encoder = in -> {
//            ByteBuf out = ByteBufAllocator.DEFAULT.buffer();
//            try {
//                ByteBufOutputStream os = new ByteBufOutputStream(out);
//                JSON.writeJSONString(os, in, SerializerFeature.WriteClassName);
//                return os.buffer();
//            } catch (IOException e) {
//                out.release();
//                throw e;
//            } catch (Exception e) {
//                out.release();
//                throw new IOException(e);
//            }
//        };
//
//        private final Decoder<Object> decoder = (buf, state) -> JSON.parseObject(new ByteBufInputStream(buf), Object.class);
//
//        @Override
//        public Decoder<Object> getValueDecoder() {
//            return decoder;
//        }
//
//        @Override
//        public Encoder getValueEncoder() {
//            return encoder;
//        }
//
//    }
//
//}
